home *** CD-ROM | disk | FTP | other *** search
- DATA SEGMENT PUBLIC 'DATA'
- TITLE__ DB 'TITLE: STRING MANIPULATION FOR MS FORTRAN'
- COPY_R DB ' (C) John R. Petrocelli'
- DB ' Schenectady,NY '
- DB ' 01/13/86 '
- SOURCE_START DB ?
- SOURCE_COUNT DB ?
- TARGET_START DB ?
- TARGET_COUNT DB ?
- MISMATCH_MSG DB ' ** SUBSTR SOURCE/TARGET LENGTH MISMATCH$'
- DATA ENDS
- DGROUP GROUP DATA
- CODE SEGMENT 'CODE'
- ASSUME CS:CODE,DS:DGROUP,SS:DGROUP
- PUBLIC SUBSTR
- SUBSTR PROC FAR
- PUSH BP
- PUSH AX
- PUSH BX
- PUSH CX
- PUSH DX
- PUSH DS
- MOV BP,SP
- LES BX,DWORD PTR[BP+16]
- MOV AL,[BX]
- LES BX,DWORD PTR[BP+20]
- MOV BL,[BX]
- MOV SOURCE_START,BL
- SUB AL,BL
- ADD AL,01
- MOV SOURCE_COUNT,AL
- LES BX,DWORD PTR[BP+28]
- MOV AL,[BX]
- LES BX,DWORD PTR[BP+32]
- MOV BL,[BX]
- MOV TARGET_START,BL
- SUB AL,BL
- ADD AL,01
- MOV TARGET_COUNT,AL
- CMP SOURCE_COUNT,AL
- JNZ MISMATCH
- MOV CH,00
- MOV CL,TARGET_COUNT
- LES SI,DWORD PTR[BP+24]
- LDS DI,DWORD PTR[BP+36]
- CLD
- ; REP MOVS [DI],[SI]
- REP MOVSB
- QUIT: POP DS
- POP DX
- POP CX
- POP BX
- POP AX
- POP BP
- RET 24
- MISMATCH:
- LEA DX,MISMATCH_MSG
- MOV AX,0900H
- INT 21H
- JMP QUIT
- SUBSTR ENDP
- CODE ENDS
- END